package com.example.testing.launchmode;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.example.testing.R;

/**
 *  Activty可以通过taskAffinity来指定Activity所运行的栈
 *  taskAffinity有两种应用场景：
 *  
 *  1.taskAffinity配对singleTask配对使用（和其它模式的Activity配对使用没有意义），这时候是指定了启动的Activity所需要的栈。
 *  如果需要的栈里，有该Activity，则不创建新的Activity, 直接把存在的Activity移动到栈顶，并销毁中间Activity.
 *  如果所需要的咋你，没有Activity，则创建Activity，把创建的Activity放到栈顶。
 *
 *  2.taskAffinity还可以和allowTaskReparenting配对使用
 *  这种情况一般是指定Activity可不可以转移到本该属于它的Activity任务栈中，一般发生在一个App启动了另一个App的Activity.举例说明：
 *  App A启动了App B里的Activity C, 由于A启动了C，所以C应该是在A的任务栈的，这时候按home键，再打开应用B，如果Activity C配置过
 *  allowTaskReparenting为true，那打开的不是B应用的主页面，而应该是Activity C，因为这时候，它从A的任务栈里，转移到B的任务栈里。
 */
public class TaskAffinityActivity extends Activity {
    private static final String TAG = "SingleTopActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.e(TAG, "onCreate: ");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_taskaffinity);
    }

    @Override
    protected void onStart() {
        Log.e(TAG, "onStart: ");
        super.onStart();
    }

    /**
     * 不管当前Activity是否在栈顶，都会调用onResume方法
     * 如果已经在栈顶了，该方法在onNewIntent之后调用
     */
    @Override
    protected void onResume() {
        Log.e(TAG, "onResume: ");
        super.onResume();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        Log.e(TAG, "onNewIntent: ");
        super.onNewIntent(intent);
    }

    @Override
    protected void onRestart() {
        Log.e(TAG, "onRestart: ");
        super.onRestart();
    }

    @Override
    protected void onPause() {
        Log.e(TAG, "onPause: ");
        super.onPause();
    }

    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        Log.e(TAG, "onRestoreInstanceState:");
        String name = (String) savedInstanceState.get("name");
        Toast.makeText(this, "name:" + name, Toast.LENGTH_SHORT).show();
        super.onRestoreInstanceState(savedInstanceState);
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.e(TAG, "onSaveInstanceState: ");
        super.onSaveInstanceState(outState);
        outState.putString("name", "josan");
    }

    @Override
    protected void onStop() {
        Log.e(TAG, "onStop: ");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        Log.e(TAG, "onDestroy: ");
        super.onDestroy();
    }
}
